Spring JDBC-এ NamedParameterJdbcTemplate
একটি বিশেষ ধরনের JdbcTemplate
যা SQL কোয়েরি লেখার সময় নামকৃত প্যারামিটার ব্যবহার করতে সহায়ক। এটি কোডটি আরও পাঠযোগ্য এবং রক্ষণাবেক্ষণযোগ্য করে তোলে, কারণ SQL স্টেটমেন্টে প্যারামিটারগুলি নাম দিয়ে উল্লেখ করা হয়, না যে তাদের অবস্থান (position) দিয়ে।
NamedParameterJdbcTemplate
ব্যবহার করার জন্য SQL কোয়েরিতে নামকৃত প্যারামিটার ব্যবহার করতে হবে এবং সেই প্যারামিটারগুলির মান Map
বা SqlParameterSource
এর মাধ্যমে সরবরাহ করতে হবে।
ধরা যাক, আমাদের একটি Employee টেবিল রয়েছে যার মধ্যে id, name, এবং salary ফিল্ড রয়েছে। আমাদের একটি SQL কোয়েরি ব্যবহার করে NamedParameterJdbcTemplate
এর মাধ্যমে ডেটাবেসে ডেটা ইনসার্ট এবং সিলেক্ট করার উদাহরণ নিচে দেখানো হলো।
প্রথমে, আপনাকে Spring JDBC এবং Spring Context ডিপেনডেন্সি আপনার pom.xml
ফাইলে যুক্ত করতে হবে (যদি না থাকে)।
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.24</version> <!-- সর্বশেষ সংস্করণ নিশ্চিত করতে Maven Repository থেকে চেক করুন -->
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.24</version>
</dependency>
প্রথমে DataSource
কনফিগারেশন করতে হবে। এই উদাহরণে, আমরা HikariCP ব্যবহার করছি, তবে আপনি Tomcat Connection Pool বা অন্য কোন পুল ব্যবহার করতে পারেন।
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
@Configuration
public class DataSourceConfig {
@Bean
public DataSource dataSource() {
HikariConfig hikariConfig = new HikariConfig();
hikariConfig.setJdbcUrl("jdbc:mysql://localhost:3306/your_database");
hikariConfig.setUsername("your_username");
hikariConfig.setPassword("your_password");
hikariConfig.setDriverClassName("com.mysql.cj.jdbc.Driver");
return new HikariDataSource(hikariConfig);
}
}
NamedParameterJdbcTemplate
ক্লাসকে একটি JdbcTemplate
এর বিকল্প হিসেবে ব্যবহার করা হয়। এতে SQL কোয়েরিতে প্যারামিটারগুলি নামের মাধ্যমে উল্লেখ করা হয়।
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class EmployeeDAO {
private final NamedParameterJdbcTemplate jdbcTemplate;
@Autowired
public EmployeeDAO(DataSource dataSource) {
this.jdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
}
// Employee ইনসার্ট করার জন্য
public void addEmployee(int id, String name, double salary) {
String sql = "INSERT INTO Employee (id, name, salary) VALUES (:id, :name, :salary)";
MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("id", id);
parameters.addValue("name", name);
parameters.addValue("salary", salary);
jdbcTemplate.update(sql, parameters);
}
// সমস্ত Employee পড়ার জন্য
public List<Employee> getAllEmployees() {
String sql = "SELECT * FROM Employee";
return jdbcTemplate.query(sql, new EmployeeRowMapper());
}
}
NamedParameterJdbcTemplate
এর মাধ্যমে সিলেক্ট কোয়েরি চালানোর সময় আমরা RowMapper
ব্যবহার করে রেজাল্ট সেটকে Employee
অবজেক্টে রূপান্তর করি।
import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet;
import java.sql.SQLException;
public class EmployeeRowMapper implements RowMapper<Employee> {
@Override
public Employee mapRow(ResultSet rs, int rowNum) throws SQLException {
Employee employee = new Employee();
employee.setId(rs.getInt("id"));
employee.setName(rs.getString("name"));
employee.setSalary(rs.getDouble("salary"));
return employee;
}
}
এখন, Employee
ক্লাসটি তৈরি করি, যেখানে id
, name
, এবং salary
ফিল্ড থাকবে।
public class Employee {
private int id;
private String name;
private double salary;
// Getters and Setters
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
:id
, :name
, এবং :salary
এর মতো হবে।MapSqlParameterSource
ব্যবহার করে এই নামকৃত প্যারামিটারগুলির মান পাস করা হয়।MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("id", id);
parameters.addValue("name", name);
parameters.addValue("salary", salary);
এখন আপনি EmployeeDAO
ক্লাসটি ব্যবহার করে ডেটাবেসে ডেটা ইনসার্ট এবং সিলেক্ট করতে পারবেন।
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Main {
public static void main(String[] args) {
// Spring কনটেক্সট ইনিশিয়ালাইজ করা
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(DataSourceConfig.class);
EmployeeDAO employeeDAO = context.getBean(EmployeeDAO.class);
// নতুন Employee ইনসার্ট করা
employeeDAO.addEmployee(1, "John Doe", 50000);
// সমস্ত Employee পড়া
List<Employee> employees = employeeDAO.getAllEmployees();
employees.forEach(employee -> System.out.println(employee.getName()));
context.close();
}
}
এই উদাহরণটি দেখিয়েছে কিভাবে Spring JDBC তে NamedParameterJdbcTemplate
ব্যবহার করে প্যারামিটারাইজড SQL কোয়েরি পরিচালনা করা যায়।
Read more